﻿--1. 为学校开发一个学生管理系统，请为该系统创建数据库，主要存放的信息有：班级信息、学生信息、课程信息、学生考试成绩
create database Student
go

use Student

--   班级信息：班级编号 classid (主键、标识列)
--             班级名称(例如：T1、T2、D09等等):不能为空，不能重复
--             开办时间：不能为空
--             班级描述 text-->nvarchar(max)
create table ClassInfo(
	ClassId int primary key identity(1,1),
	ClassName nvarchar(10) not null unique,
	KaibanTime date not null,
	ClassDesc nvarchar(max) 
);

--   学生信息：学号：主键、标识列
--             姓名：长度大于2，不能重复
--             性别：只能是‘男’或‘女’，默认为男，不能为空
--             年龄：在15-40之间，不能为空
--             家庭地址：默认为“福建龙岩”
--             所在的班级编号 外键

create table StudentInfo(
	StuId int primary key identity(1,1),
	StuName nvarchar(10) not null unique check(len(StuName)>2),
	StuSex nvarchar(1) check(StuSex='男'or StuSex='女') default('男'),
	StuAge int check( StuAge>=15 and StuAge<=40)not null ,
	--              ( StuAge between 15 and 40)
	StuAddress nvarchar(100)default('福建龙岩'),
	ClassId int foreign key references  ClassInfo(ClassId),
);


--   课程信息：编号：主键、标识列
--             课程名：不能为空，不能重复
--             课程描述：
create table CourseInfo(
	CourseId int primary key identity(1,1),
	CourseName nvarchar(20) not null unique,
	CourseDesc nvarchar(max)
);

insert CourseInfo(CourseName,CourseDesc)
values('SQL','数据库基础'),
	  ('C#','面向对象');

--drop table CourseInfo

--   成绩信息：成绩编号：主键、标识列
--             成绩所属于的学生编号，不能为空 外键
--             成绩所属的课程编号，不能为空 外键
--             成绩：在0-100之间

create table ScoreInfo(
	ScoreID int primary key identity(1,1),
	ClassId int not null,
	CourseId int not null,
	Score char(3) check((Score)>=0 and (Score)<=100),

);
go

--插入数据
insert ScoreInfo(ClassId,CourseId,Score)
values(1,1,'100');

--修改表：增加外键约束
alter table ScoreInfo add constraint FK_ScoreInfo_ClassId foreign key(ClassId) references ClassInfo(ClassId)
alter table ScoreInfo add constraint FK_ScoreInfo_CourseId foreign key(CourseId) references CourseInfo(CourseId)


--在表中插入数据：
--insert [into] 表名(字段1，字段2，...) values（字段1的值，字段2的值）


--create table ClassInfo(
--	ClassId int primary key identity(1,1),
--	ClassName nvarchar(10) not null unique,
--	KaibanTime date not null,
--	ClassDesc nvarchar(max) 
--);

--往ClassInfo表插入数据
--1.第一种
insert ClassInfo(ClassName,ClassDesc,KaibanTime) 
values('软件技术4班','1班最强','2022-2-28');
insert ClassInfo(ClassName,KaibanTime,ClassDesc) 
values('软件技术2班','2022-2-28','...');
--2.第二种
insert ClassInfo
values('软件技术3班','2022-2-28','...')

--3.第三种
insert ClassInfo(ClassName,KaibanTime,ClassDesc)
values('软件5班','2022-2-28','...'),
	  ('软件6班','2022-2-28','....');


--create table StudentInfo(
--	StuId int primary key identity(1,1),
--	StuName nvarchar(10) not null unique check(len(StuName)>2),
--	StuSex nvarchar(1) check(StuSex='男'or StuSex='女') default('男'),
--	StuAge int check( StuAge>=15 and StuAge<=40)not null ,
--	--              ( StuAge between 15 and 40)
--	StuAddress nvarchar(100)default('福建龙岩'),
--	ClassId int foreign key references  ClassInfo(ClassId),  外键
--);
insert StudentInfo(StuName,StuSex,StuAge)
values('徐立🐏','男',40);

insert StudentInfo(StuName,StuSex,StuAge,StuAddress,ClassId)
values('郑赛红','男',18,'福建莆田',1);


--简单查询
--* 所有信息
select * from StudentInfo;
select * from ClassInfo;

--------------------
-- 建库部分
--------------------
-- 创建学生管理系统数据库，名称为Student

--------------------
-- 建表部分
--------------------
-- 创建班级表ClassInfo，存储班级信息，其中字段包含：班级id(ClassId 主键)、班级名称()

-- 创建学生表StudentInfo，存储学生信息，其中字段保护：学生id、姓名、性别、手机号、生日、邮箱、家庭住址，所属班级id(外键)
-- 创建课程表CoureInfo，存储课程信息，其中字段包含：课程id、课程名称、课程学分(2,3,6)
-- 创建班级课程表ClassCourseInfo，存储班级课程信息，其中字段包含：自增id、班级id(外键)、课程id（外键）
-- 创建分数表ScoreInfo，存储学生每个课程分数信息，其中字段包含：分数id、学生id(外键)、课程id(外键)、分数